package com.ys.enume.purchase;

import java.util.ArrayList;
import java.util.List;

//采购订单
public class TcgPurchaseByOrderEnum {
	
	/*
	 * 采购管理状态
	 */
    public enum OrderStatus {
        START_NULL("空", 0),//采购计划审批流完成，初始状态
        PLAN_CANCEL("计划已取消", 1),//采购计划确认取消
        ORDER_PRODUCE("订单已创建", 2),//采购计划审核至采购订单
        PRODUCE_YB_1688("订单已生成", 3),//采购订单生成1688订单（无红包优惠金额）
        CANCEL_YB_1688("订单已取消", 4),//1688订单取消并退回采购计划
        API_NEED_PAY("订单待付款", 5),//采购订单审核至采购付款
        PAY_CANCEL("付款已取消", 6),//采购付款取消并退回采购订单
        PAY_YES("订单已付款", 7),//采购付款完成
        PAY_FAIL("付款失败", 8),//采购付款失败
        PAY_FINISH("订单已完成", 9),//采购已付款完成
        PRODUCE_YB_1688_WITH_COUPON("订单已生成（含红包）", 10),//采购订单生成1688订单（有红包优惠金额）
        PRODUCE_YB_1688_OCCUPY_COUPON("订单已生成（占用红包）", 11),//“订单已生成（含红包）”的订单点击“占用红包”后变更的状态
        PRODUCE_YB_1688_FAIL("订单生成失败", 12),//采购订单生成1688订单失败
        ;
        public String name;
        public Integer value;

        private OrderStatus(String name, Integer value) {
            this.name = name;
            this.value = value;
        }

        public static String getName(Integer value) {
            for (OrderStatus e : OrderStatus.values()) {
                if (e.value.equals(value)) {
                    return e.name;
                }
            }
            return "";
        }


        public static String getNameStrByList(List<OrderStatus> list) {
            StringBuilder res = new StringBuilder();
            for(OrderStatus item:list){
                if(res.length()>0){
                    res.append("、");
                }
                res.append(item.name);
            }
            return res.toString();
        }
        public static String getValueSearchByList(List<OrderStatus> list) {
            StringBuilder res = new StringBuilder();
            for(OrderStatus item:list){
                if(res.length()>0){
                    res.append(",");
                }
                res.append(item.value);
            }
            return res.toString();
        }

        //验证状态是否包含
        public static boolean checkStatus(List<OrderStatus> list,Integer checkValue) {
            boolean statusIsPass = false;
            for(OrderStatus orderStatus:list){
                if(orderStatus.value.equals(checkValue)){
                    statusIsPass = true;
                    break;
                }
            }
            return statusIsPass;
        }

        //可以进行审核的状态
        public static List<OrderStatus> getExamineStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PAY_CANCEL);//付款已取消
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            return list;
        }

        //可以进行更换渠道的状态
        public static List<OrderStatus> getChangeChannelStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.ORDER_PRODUCE);//订单已创建
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            list.add(OrderStatus.PRODUCE_YB_1688_FAIL);//订单生成失败
            list.add(OrderStatus.PAY_CANCEL);//付款已取消
            return list;
        }

        //更换渠道时，需要访问1688进行订单取消操作的状态
        public static List<OrderStatus> getCancel1688WhenChangeChannelStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            list.add(OrderStatus.PAY_CANCEL);//付款已取消
            return list;
        }

        //可以进行订单同步的状态
        public static List<OrderStatus> getRefreshStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.ORDER_PRODUCE);//订单已创建
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            //list.add(OrderStatus.PRODUCE_YB_1688_FAIL);//订单生成失败
            list.add(OrderStatus.PAY_CANCEL);//付款已取消
            //list.add(OrderStatus.PAY_FINISH);//订单已完成
            return list;
        }


        //可以进行订单同步时，1688回调需要修改订单状态 的状态
        public static List<OrderStatus> get1688RefreshAndUpdateStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.ORDER_PRODUCE);//订单已创建
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            return list;
        }


        //可以进行修改商议订单金额（含运）的状态
        public static List<OrderStatus> getUpdateOrderAmountDiscuss() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            return list;
        }


        //可以进行修改采购订单金额（含税）的状态
        public static List<OrderStatus> getUpdatePurchaseOrderAmount() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.ORDER_PRODUCE);//订单已创建
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            list.add(OrderStatus.PRODUCE_YB_1688_FAIL);//订单生成失败
            list.add(OrderStatus.PAY_CANCEL);//付款已取消
            return list;
        }




        //可以进行生成创建1688订单的状态
        public static List<OrderStatus> getCreateOrderStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.ORDER_PRODUCE);//订单已创建
            list.add(OrderStatus.PRODUCE_YB_1688_FAIL);//订单生成失败
            return list;
        }

        //可以进行取消订单的状态
        public static List<OrderStatus> getCancelStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.ORDER_PRODUCE);//订单已创建
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            list.add(OrderStatus.PRODUCE_YB_1688_OCCUPY_COUPON);//订单已生成（占用红包）
            list.add(OrderStatus.PRODUCE_YB_1688_FAIL);//订单生成失败
            list.add(OrderStatus.PAY_CANCEL);//付款已取消
            return list;
        }

        //取消订单时、需要访问1688取消接口的状态
        public static List<OrderStatus> send1688WhenCancelStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            list.add(OrderStatus.PRODUCE_YB_1688_OCCUPY_COUPON);//订单已生成（占用红包）
            list.add(OrderStatus.PAY_CANCEL);//付款已取消
            return list;
        }

        //可以进行占用红包的状态
        public static List<OrderStatus> getOccupyStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            return list;
        }

        //采购订单查询页默认显示的状态
        public static List<OrderStatus> getOrderSearchStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.ORDER_PRODUCE);//订单已创建
            list.add(OrderStatus.PRODUCE_YB_1688);//订单已生成
            list.add(OrderStatus.PAY_CANCEL);//付款已取消
            list.add(OrderStatus.PRODUCE_YB_1688_WITH_COUPON);//订单已生成（含红包）
            list.add(OrderStatus.PRODUCE_YB_1688_OCCUPY_COUPON);//订单已生成（占用红包）
            list.add(OrderStatus.PRODUCE_YB_1688_FAIL);//订单生成失败
            return list;
        }

        //可以进行付款的状态
        public static List<OrderStatus> getPayStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.API_NEED_PAY);//订单待付款
            list.add(OrderStatus.PAY_FAIL);//采购付款失败
            return list;
        }

        //采购付款单查询页默认显示的状态
        public static List<OrderStatus> getPaySearchStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.API_NEED_PAY);//订单待付款
            list.add(OrderStatus.PAY_YES);//订单已付款
            list.add(OrderStatus.PAY_FAIL);//付款失败
            list.add(OrderStatus.PAY_CANCEL);//付款已取消
            return list;
        }

        //可以进行取消付款单的状态
        public static List<OrderStatus> getCancelPayStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.API_NEED_PAY);//订单待付款
            list.add(OrderStatus.PAY_FAIL);//付款失败
            return list;
        }

        //可以进行付款单审核的状态
        public static List<OrderStatus> getExaminePayStatus() {
            List<OrderStatus> list = new ArrayList<>();
            list.add(OrderStatus.PAY_YES);//订单已付款
            return list;
        }




    }

    /*
     * 操作状态
     */
    public enum OperateStatus {
        NORMAL("正常状态", 0),//正常状态
        CHANGE_CHANNEL_CANCEL("更换渠道后取消的订单", 1),//更换渠道后取消的订单，不可做其他所有的操作
        OCCUPY_COUPON("订单已生成（占用红包）", 2),//订单已生成（占用红包）状态，除了订单取消，其他操作不可做

        ;
        public String name;
        public Integer value;

        private OperateStatus(String name, Integer value) {
            this.name = name;
            this.value = value;
        }

        public static String getName(Integer value) {
            for (OperateStatus e : OperateStatus.values()) {
                if (e.value.equals(value)) {
                    return e.name;
                }
            }
            return "";
        }
    }
}
